/*
 * sensor.h
 *
 *  Created on: Nov 20, 2024
 *      Author: Vinson
 */

#ifndef SRC_SENSOR_H_
#define SRC_SENSOR_H_
#include "utils.h"

//#define TLE_5012B
#define TLE_5012B_DMA

#define M_PI    						(3.14159265359f)
#define TWO_PI  						(6.28318530718f)
#define PI       						(3.14159265359f)

#define AngleToRad(x) 					(1.0 * (x) * PI / 180)

#define MIN_ANGLE_DETECT_MOVEMENT 		(_2PI/101.0f)

#define _isset(a) ( (a) != (NOT_SET) )

#define NOT_SET -12345.0f

/* @brief  ：获取编码器的角度(弧度值)
 * @name   ：getSensorAngle
 * @param  ：无
 * @return ：返回获取的编码器弧度值[0~2PI]
 * @details：无
 */
int getSensorAngle(double *angleValue);

/* @brief  ：获取电机的机械角度(弧度值)
 * @name   ：getMechanicalAngle
 * @param  ：无
 * @return ：返回电机此时机械角度[0~2PI]
 * @details：无
 */
float getMechanicalAngle();

/* @brief  ：更新当前的电机位置，圈数和时间戳信息
 * @name   ：sensor_update
 * @param  ：无
 * @return ：无
 * @details：无
 */
void sensor_update();

/* @brief  ：获取当前的位置（弧度）,带圈
 * @name   ：getAngle
 * @param  ：无
 * @return ：返回电机当前位置，带圈
 * @details：获取当前位置。sensor_update 之后调用
 */
float getFullAngle();

/* @brief  ：计算电机的速度(rad/s)
 * @name   ：getVelocity()
 * @param  ：无
 * @return ：返回电机的速度
 * @details：无
 */
float getVelocity();

void sensor_init();

#endif /* SRC_SENSOR_H_ */
